home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Programmation / jedit / jedit5.1.0install.exe / {app} / macros / Files / Buffer_Switcher.bsh < prev    next >
Text File  |  2013-07-28  |  8KB  |  270 lines

  1. /*
  2.  * Buffer_Switcher.bsh - a BeanShell macro script for displaying
  3.  * and switching between open buffers.
  4.  *
  5.  * Copyright (C) 2001-2004 Ollie Rutherfurd, oliver@rutherfurd.net
  6.  *
  7.  * :mode=beanshell:tabSize=4:indentSize=4:maxLineLen=0:noTabs=false:
  8.  * :indentOnTab=true:indentOnEnter=true:folding=explicit:collapseFolds=1:
  9.  *
  10.  * {{{ License
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version 2
  14.  * of the License, or any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with the jEdit program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  24.  * }}}
  25.  *
  26.  * Notes:
  27.  *
  28.  * This is very similar to the functionality provided by the BufferList
  29.  * plugin but, that is overkill for me.  I just want a way I can
  30.  * see and switch between buffers without having to use the mouse
  31.  * to go to the BufferSwitcher widget in the EditPane.
  32.  *
  33.  * DELETE: closes the selected buffer but not the dialog.
  34.  * ENTER: switches to the selected buffer and closes the dialog.
  35.  * ESCAPE: closes the dialog.
  36.  * SPACE: switches to the selected buffer but does not close the dialog.
  37.  *
  38.  * $Id: Buffer_Switcher.bsh 21769 2012-06-07 15:09:15Z k_satoda $
  39.  */
  40.  
  41. import javax.swing.border.EmptyBorder;
  42.  
  43. //Localization
  44. final static String OpenBuffersLabel   = jEdit.getProperty("macro.rs.BufferSwitcher.OpenBuffers.label",  "open Buffers");
  45. final static String QuickHelpLabel   = jEdit.getProperty("macro.rs.BufferSwitcher.QuickHelp.label",  "[ENTER] Switch to; [SPACE] Switch to, keep dialog; [DEL] Close Buffer");
  46. final static String Help1Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help1.label",  "Help for Buffer Switcher macro:");
  47. final static String Help2Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help2.label",  "DELETE closes selected buffer.");
  48. final static String Help3Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help3.label",  "ENTER switches to selected buffer, closes dialog.");
  49. final static String Help4Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help4.label",  "ESCAPE closes dialog.");
  50. final static String Help5Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help5.label",  "SPACE switches to selected buffer, does not close dialog.");
  51. final static String Help6Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help6.label",  "NOTE: This dialog will only be displayed once");
  52.  
  53. /*
  54. * Custom Cell Renderer which displays the buffer icons in the JList.
  55. * As it runs a little slowly on my machine, it is not used by default.
  56. *
  57. * set useCustomCellRenderer to true at the bottom of this macro to use this.
  58. */
  59. // {{{ BufferCellRenderer
  60. BufferCellRenderer()
  61. {
  62.  
  63.     l = new JLabel();
  64.     l.setOpaque(true);
  65.  
  66.     Component getListCellRendererComponent(
  67.         JList list,
  68.         Object value,
  69.         int index,
  70.         boolean isSelected,
  71.         boolean cellHasFocus)
  72.     {
  73.         l.setText(value.toString());
  74.         l.setIcon(value.getIcon());
  75.  
  76.         if (isSelected)
  77.         {
  78.             l.setBackground(list.getSelectionBackground());
  79.             l.setForeground(list.getSelectionForeground());
  80.         }
  81.         else
  82.         {
  83.             l.setBackground(list.getBackground());
  84.             l.setForeground(list.getForeground());
  85.         }
  86.  
  87.         return l;
  88.  
  89.     }
  90.  
  91.     return this;
  92. }    // }}}
  93.  
  94. /*
  95. * BufferSwitcherDialog - Dialog allows one to switch between
  96. * open buffers (and/or close open buffers).
  97. */
  98. BufferSwitcherDialog(doModal, useCustomCellRenderer)
  99. {
  100.  
  101.     // {{{ create dialog
  102.     Buffer[] openBuffers = jEdit.getBuffers();
  103.     int numOpen = openBuffers.length;
  104.     dialog = new JDialog(view, numOpen + " " + OpenBuffersLabel, doModal);
  105.     content = new JPanel(new BorderLayout());
  106.     content.setBorder(new EmptyBorder(12,12,12,12));
  107.     dialog.setContentPane(content);
  108.  
  109.     bufferList = new JList(openBuffers);
  110.     bufferList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  111.     if(useCustomCellRenderer)
  112.         bufferList.setCellRenderer(BufferCellRenderer());
  113.     content.add(new JScrollPane(bufferList), BorderLayout.CENTER);
  114.  
  115.     content.add(new JLabel(QuickHelpLabel), BorderLayout.NORTH);
  116.  
  117.     buttonPanel = new JPanel();
  118.     buttonPanel.setLayout(new BoxLayout(buttonPanel, 
  119.         BoxLayout.X_AXIS));
  120.  
  121.     buttonPanel.setBorder(new EmptyBorder(12,50,0,50));
  122.     buttonPanel.add(Box.createGlue());
  123.     ok = new JButton("OK");
  124.     close = new JButton("Close");
  125.     ok.setPreferredSize(close.getPreferredSize());
  126.     dialog.getRootPane().setDefaultButton(ok);
  127.     buttonPanel.add(ok);
  128.     buttonPanel.add(Box.createHorizontalStrut(6));
  129.     buttonPanel.add(close);
  130.     buttonPanel.add(Box.createGlue());
  131.     content.add(buttonPanel, BorderLayout.SOUTH);
  132.     // }}}
  133.  
  134.     // {{{ switchBuffer()
  135.     void switchBuffer()
  136.     {
  137.         _buffer = bufferList.getSelectedValue();
  138.         if(_buffer == null)
  139.             view.getToolkit().beep();
  140.         else
  141.             view.getEditPane().setBuffer(_buffer);
  142.     }    // }}}
  143.  
  144.     // {{{ closeBuffer()
  145.     void closeBuffer()
  146.     {
  147.         index = bufferList.getSelectedIndex();
  148.         _buffer = bufferList.getSelectedValue();
  149.         if(_buffer == null)
  150.             view.getToolkit().beep();
  151.         else
  152.             if(jEdit.closeBuffer(view, _buffer))
  153.             {
  154.                 bufferList.setListData(jEdit.getBuffers());
  155.                 if(index == jEdit.getBufferCount())
  156.                     index--;
  157.                 bufferList.setSelectedIndex(index);
  158.             }
  159.         numOpen--;
  160.         dialog.setTitle("" + numOpen + " Open Buffers");
  161.     }    // }}}
  162.  
  163.     // {{{ actionPerformed
  164.     void actionPerformed(evt)
  165.     {
  166.         if(evt.getSource() == ok)
  167.             switchBuffer();
  168.         dialog.dispose();
  169.         dialog = null;
  170.     }    // }}}
  171.  
  172.     // {{{ KeyListener implementation
  173.     void keyPressed(evt)
  174.     {
  175.         if(evt.getKeyCode() == KeyEvent.VK_ESCAPE)
  176.             dialog.dispose();
  177.         else if(evt.getKeyCode() == KeyEvent.VK_SPACE)
  178.             switchBuffer();
  179.         else if(evt.getKeyCode() == KeyEvent.VK_DELETE)
  180.         {
  181.             evt.consume();
  182.             closeBuffer();
  183.         }
  184.     }
  185.  
  186.     void keyReleased(evt)
  187.     {
  188.         int selected = bufferList.getSelectedIndex();
  189.         if(selected > -1)
  190.             bufferList.ensureIndexIsVisible(selected);
  191.     }
  192.  
  193.     void keyTyped(evt){}
  194.     // }}}
  195.  
  196.     // {{{ MouseListener implementation
  197.     void mouseClicked(evt)
  198.     {
  199.         if(evt.getClickCount() > 1)
  200.         {
  201.             switchBuffer();
  202.             dialog.dispose();
  203.         }
  204.     }
  205.  
  206.     void mouseEntered(evt){}
  207.     void mouseExited(evt){}
  208.     void mousePressed(evt){}
  209.     void mouseReleased(evt){}
  210.     // }}}
  211.  
  212.     // {{{ add listeners
  213.     dialog.addKeyListener(this);
  214.     bufferList.addKeyListener(this);
  215.     bufferList.addMouseListener(this);
  216.     ok.addActionListener(this);
  217.     close.addActionListener(this);
  218.     // }}}
  219.  
  220.     // {{{ display dialog
  221.     dialog.pack();
  222.     bufferList.setSelectedValue(buffer,true);
  223.     dialog.setLocationRelativeTo(view);
  224.     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  225.     dialog.setVisible(true);
  226.     // }}}
  227.  
  228. }
  229.  
  230.  
  231. // SETTINGS {{{
  232. doModal = true;
  233.  
  234. // whether or not to use custom CellRenderer
  235. useCustomCellRenderer = true;
  236.  
  237. // show help for keys on first run
  238. showHelp = jEdit.getProperty("macro.buffer_switcher.display-help","1");
  239. if(showHelp.equals("1"))
  240. {
  241.     Macros.message(view, Help1Label + "\n\n" 
  242.         + Help2Label + "\n"
  243.         + Help3Label + "\n"
  244.         + Help4Label + "\n"
  245.         + Help5Label + "\n\n"
  246.         + Help6Label);
  247.     jEdit.setProperty("macro.buffer_switcher.display-help","0");
  248. }
  249. // }}}
  250.  
  251.  
  252. BufferSwitcherDialog(doModal, useCustomCellRenderer);
  253.  
  254.  
  255. /*
  256.  
  257. Macro index data (in DocBook format)
  258.  
  259.     <listitem>
  260.         <para><filename>Buffer_Switcher</filename></para>
  261.         Displays a modal dialog listing all open buffers,
  262.         allowing one to switch to and/or close buffers.
  263.         <keycap>ENTER</keycap> switches to a buffer and closes the dialog, 
  264.         <keycap>DELETE</keycap> closes a buffer, <keycap>SPACE</keycap> 
  265.         switches to a buffer but does not close the dialog.
  266.         </para></abstract>
  267.     </listitem>
  268.  
  269. */
  270.